package CExtends
{
	import UIFree.ObjectEvent;
	import UIFree.uif_Timer;
	
	import UIUtils.uif_util;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	
	import mailru.MailruCall;
	import mailru.MailruCallEvent;
	
	public class pie_send_menu extends Object {
		private const SELECTUSERFROMQUESTION: String = 'Выберите друга, кому бы вы хотели отправить открытку в гостевую книгу.\n' + 
														'В гостевой книге пользователя, открытка сохраняется без эффектов.';
		private const TITLEFROMQUESTION: String = 'Открытка от %s';
		private const DEFAULTTEXT: String = 'Оформи и ты свое фото!';
		private const MAILTITLE: String = 'Отправка открытки по эл.почте';
//		private const MAILDESCRIPTION: String = 'Введите e-mail получателя открытки. Можно вводить несколько адресов разделенных запятой\n<b>Например:</b>\npetrov@gmail.com,sidorov@yandex.ru';
		private const MAILDESCRIPTION: String = 'Введите e-mail получателя открытки';
		private const MAILDMESSAGEDESCR: String = 'Введите текст сообщения';
		private const URLEMAILSEND: String = 'http://oformi-foto.ru/games/';
		private const SENDSUCCESS: String = 'Ваша открытка успешно отправлена!';
		private const SENDERROR: String = 'Не удалось отправить открытку, возможно сервер перезагружен запросами. Попробуйте отправить открытку позже.';
		
		private var _app: Object;
		private var _layer: Object;
		
		private var _buttons: Object;
		public function pie_send_menu(a_app: Object, extendsLayer: Object) {
			super();
			_app = a_app;

/*			_app.styles['pie_menu_button'] = _app.merge('button', {
				fill_color: {
					colors: [0xAAFFEE, 0x00AA00, 0x88FF88],
					alphas: [1, 1, 1],
					ratios: [0x0, 0x88, 0xFF],
					rotation: Math.PI / 2
				},
				text_format: {
					selectable: false,
					font: 'tahoma',
					size: 12,
					align: 'center',
					color: 0xFFFFFF,
					bold: true
				}				
			});*/
			
			_layer = new _app.classes.component(extendsLayer, 10, extendsLayer.sendButton.y + 59, 
							230, 150, 'tabBlock');
			_layer.visible = false;
			
			_buttons = new Object();
			
			var inner: Rectangle = _layer.getInner();
			_buttons['friend'] = new _app.classes.buttonGlow(_layer, inner.x, inner.y, inner.width, 30, 'button-glow');
			_buttons['friend'].text = '...другу';
			_buttons['friend'].addEvent(MouseEvent.CLICK, function(e: MouseEvent): void {
				_app.sendCard();
			});
			
			_buttons['question'] = new _app.classes.buttonGlow(_layer, inner.x, inner.y + 35, inner.width, 30, 'button-glow');
			_buttons['question'].text = '...в гостевую книгу друга';
			_buttons['question'].addEvent(MouseEvent.CLICK, doQuestionBook);
			
			_buttons['album'] = new _app.classes.buttonGlow(_layer, inner.x, inner.y + 70, inner.width, 30, 'button-glow');
			_buttons['album'].text = '...в фотоальбом';
			_buttons['album'].addEvent(MouseEvent.CLICK, doAlbumSend);
			
			_buttons['email'] = new _app.classes.buttonGlow(_layer, inner.x, inner.y + 105, inner.width, 30, 'button-glow');
			_buttons['email'].text = '...по эл.почте (e-mail)';
			_buttons['email'].addEvent(MouseEvent.CLICK, doEmailSend);
			
			initEvents(extendsLayer);
		}
		
		protected function doQuestionBook(e: Event = null): void {
//			if (!_buttons['question'].disable) {
				var dialog: Object = new _app.classes.friendsDialog(_app.layers[4], 0, 0);
				dialog.description = SELECTUSERFROMQUESTION;
				dialog.addEventListener('SELECTUSERS', function(e: ObjectEvent): void {
					sendFromQuestionBook(e.object as Array);
				});
//			}
		}
		
/*		protected function sendFromQuestionBook(users: Array): void {
			
			
			var sendCount: int = users.length;
//			var msg_o: Object = _app.editor.cardBody.services['MSG'];
			var l_text: String = DEFAULTTEXT;
//			if (msg_o && msg_o.params[1]) l_text = msg_o.params[1];
			
			for (var i:int=0; i<users.length; i++) {
				var user: Object = users[i];
				var params: String;
				params = _app.cardbody.infoFromCollector();
				params += '&cardClass=pi_pngcard&unlimit=1';
				_app.myserver.collectorImage(_app.externalserver.viewer_id, params, 0, function(data: *): void {
					if (data.response[0].file) {
						function doPublish(e: MailruCallEvent): void {
							sendCount--;
							MailruCall.removeEventListener('mailru.common.events.guestbookPublish', doPublish);
						}
						MailruCall.addEventListener('mailru.common.events.guestbookPublish', doPublish);
						MailruCall.exec('mailru.common.guestbook.publish', doPublish, 
							{
								uid: user.uid, 
								title: _app.classes.data.sprintf(TITLEFROMQUESTION, _app.classes.c_app.userName(_app.userData)),
								text: l_text,
								img_url: data.response[0].file,
								action_links: [
								    {'text': 'открыткой', 'href': 'http://my.mail.ru/cgi-bin/my/app-canvas?appid=441805&ref=' + _app.userData.uid}, 
								    {'text': 'создать открытку', 'href': 'http://my.mail.ru/cgi-bin/my/app-canvas?appid=441805&ref=' + _app.userData.uid}, 
								  ]

							}
						);
					}
				});
				break;
			}
		}*/
		
		protected function sendFromQuestionBook(users: Array): void {
			
			var sendCount: int = users.length;
			var sendCountSuccess: int = 0;
			var l_text: String = DEFAULTTEXT;

			_app.manager.collectJPG( _app.cardbody.asBytes(new Point(420, 280)), function(fileName: String): void {
				if (fileName) sendToUser(fileName);
			}, 'from_question', false, false);
			
			function sendToUser(fileName: String): void {
				sendCount--;
				var user: Object = users[sendCount];
				function doPublish(e: MailruCallEvent): void {
					if (e.data.status != 'opened') {
						MailruCall.removeEventListener('common.guestbookPublish', doPublish);
						if (e.data.status == 'publishSuccess') sendCountSuccess++;
						if (sendCount > 0) sendToUser(fileName);
						else if (sendCountSuccess == 0) app.myserver.removeImage(fileName);
					}
				}
				MailruCall.addEventListener('common.guestbookPublish', doPublish);
				MailruCall.exec('mailru.common.guestbook.post', doPublish, 
					{
						uid: user.uid, 
						title: _app.classes.data.sprintf(TITLEFROMQUESTION, _app.classes.c_app.userName(_app.userData)),
						text: l_text,
						img_url: fileName,
						action_links: [
						    {'text': 'открыткой', 'href': _app.userData.uid},
						    {'text': 'Создать открытку', 'href': 'state=' + _app.cardbody.maskInfo.id + '~0'}
						  ]

					}
				);
			}
		}
		
		protected function createEmailDialog(okFunc: Function): Object {
			var dialog: Object = new _app.classes.dialog(_app.topLayer, 0, 0, 400, 278, true);
			dialog.title.text = MAILTITLE;
			
			var inner: Rectangle = dialog.getInner();
			var descr: Object = new _app.classes.label(dialog, inner.x, inner.y, inner.width, 75, 'description');
			descr.htmlText = MAILDESCRIPTION;
			var params: Object = {};
			
			params['emails'] = new _app.classes.input(dialog, inner.x, inner.y + 80, inner.width, 20, 'minput');
			
			descr = new _app.classes.label(dialog, inner.x, inner.y + 105, inner.width, 35, 'description');
			descr.htmlText = MAILDMESSAGEDESCR;
			
			params['msg'] = new _app.classes.input(dialog, inner.x, inner.y + 145, inner.width, 80, 'minput');
			
			var button: Object = new _app.classes.buttonGlow(dialog, inner.x + inner.width / 2 - 133, inner.y + 230, 135, 30, 'sysButton');
			button.text = _app.classes.data.SENDCARD;
			button.addEvent(MouseEvent.CLICK, function(e: Event): void {
				dialog.close();
				okFunc();
			});
			
			button = new _app.classes.buttonGlow(dialog, inner.x + inner.width / 2 + 2, inner.y + 230, 135, 30, 'sysButton');
			button.text = _app.classes.data.CANCEL;
			button.addEvent(MouseEvent.CLICK, function(e: Event): void {
				dialog.close();
			});
			
			_app.stage.focus = params['emails'].textField;
			
			dialog._data = params;
			return dialog;
		}
		
		protected function doEmailSend(e: Event = null): void {
			var dialog: Object = createEmailDialog(function(): void {
				_app.cardbody.createFromSend(function(link: String): void {
						var userName: String = _app.classes.c_app.userName(_app.userData);
						var emails: String = uif_util.encode(dialog._data['emails'].text);
						var desc: String = uif_util.encode(dialog._data['msg'].text);
						_app.myserver.oneQuery('sendCardEmail', _app.externalserver.viewer_id + ';0;' + link + ';' +
																emails + ';' + userName + ';' + 
																desc, function(data: Object): void {
							if (data.response[0]['send_id'])
								_app.alert(_app.classes.data.MESSAGE, SENDSUCCESS);
							else _app.alert(_app.classes.data.MESSAGE, SENDERROR);
						}, false, URLEMAILSEND);
	/*					_app.myserver.sendCardEmail(dialog._data['emails'].text, link, userName, dialog._data['msg'].text,
							function(data:*): void {
						});*/
				})
			});
			dialog.show();
		}
		
		protected function doAlbumSend(e: Event = null): void {
			_app.manager.collectJPG( _app.cardbody.asBytes(new Point(600, 600)), function(fileName: String): void {
				if (fileName) {
					function doUpload(e: MailruCallEvent): void {
						if (e.data.status != 'opened') {
							MailruCall.removeEventListener('common.upload', doUpload);
							if (e.data.status == 'uploadSuccess') _app.saveNotify();
							//else app.myserver.removeImage(fileName); файл можно не удалять, по крону будет уделен
						}
					}
					MailruCall.addEventListener('common.upload', doUpload);
					MailruCall.exec('mailru.common.photos.upload', null, {
						url: fileName,
						aid: (_app.photoData && _app.photoData.aid)?_app.photoData.aid:'_myphoto'
					});
				}// else doAlbumSend();
			}, 'from_albums', false);
		}
		
/*		protected function doAlbumSend(e: Event = null): void {
//			if (!_buttons['album'].disable) {
				var params: String;
				params = _app.cardbody.infoFromCollector();
				params += '&cardClass=pi_pngcard';
				_app.manager.checkCollectPrepaid(params, function(fileName: String): void {
					if (fileName) {
						MailruCall.exec('mailru.common.photos.upload', null, {
							img: fileName,
							url: fileName,
							aid: (_app.photoData && _app.photoData.aid)?_app.photoData.aid:'_myphoto'
						});
					} else doAlbumSend();
				});
//			}				
		}*/
		
		protected function initEvents(extendsLayer: Object): void {
			var m_focus: Boolean = false;
			function unFocus(e: Event = null): void {
				_layer.slideHide(function(): void {
					m_focus = false;
				});
			}
			
			extendsLayer.sendButton.addEvent(MouseEvent.ROLL_OVER, function(e: MouseEvent): void {
				var cb: Object = _app.editor.cardBody as Object;
				
				_buttons['question'].disable 	= !cb.hasOwnProperty('asBytes');
				_buttons['album'].disable 		= !cb.hasOwnProperty('asBytes');
				_layer.FXCancel();
				_layer.slideShow();
			});
			extendsLayer.sendButton.addEvent(MouseEvent.ROLL_OUT, function(e: MouseEvent): void {
				new uif_Timer(100, null, function (e: Event): void {
					if (!m_focus) unFocus();
				}, 1);
			});
			_layer.addEvent(MouseEvent.ROLL_OVER, function(e: MouseEvent): void {
				m_focus = true;
			});
			_layer.addEvent(MouseEvent.ROLL_OUT, unFocus);
/*			
			_app.addEventListener(Event.SELECT, function (e: ObjectEvent): void {
				_buttons['friend'].disable = !_app.albumAssessFromSend(e.object.data);
			});*/
		}
		
		public function get app(): Object {
			return _app;
		}
		
	}
}